
local hero_list = {}
ac.hero_list = hero_list
print('==预加载英雄开始===',os.time())
local point = ac.point(2000,2000)
for i,v in ipairs(load_excel('英雄设置.xlsx','英雄数据')) do
    local name = v.name
    local abi = v['技能']
    v.art = get_unit_slk2(name,'art')
    v.types = {'英雄'}
    v.state = {
        ['攻击间隔'] = 1.0,
        ['移动速度'] = 522,
        ['攻击距离'] = 600,
        ['攻击速度'] = 100,
        ['生命上限'] = 500,
        ['生命恢复'] = 0,
        ['魔法上限'] = 150,
        ['魔法恢复'] = 2,
        ['基础攻击'] = 100,
        ['基础力量'] = 100,
        ['基础敏捷'] = 100,
        ['基础智力'] = 100,
    }
    ac.lni('unit',name,v)

    hero_list[#hero_list + 1] = v


    ac.player[16]:create_unit(name,point):remove()
end
print('==预加载英雄结束===',os.time())

ac.game:event '玩家-选择英雄'(function(_,player,name,point)
    local point = point or player.point1
    local hero = player:create_unit(name,point)
    local abi = hero['技能'] or name
    hero.ui_name = player:get_name()
    
    -- hero:event '单位-死亡'(function(trg)
    --     player:notify('玩家-复活英雄',player,hero)
    -- end)
    hero:event '单位-拦截死亡'(function(trg)
        hero:add_buff '假死复活'{time = hero:get '复活时间'}
        return true
    end)
    
    unit_add_life(hero)
    
    player.hero = hero
    --初始资源
    
    player:set_camera(hero:get_point())
    player:select_unit(hero)
    player:notify('玩家-选择英雄完毕',player,hero)
    player:notify('玩家-更换英雄完毕',player,hero)
end)


ac.game:event '玩家-复活英雄'(function(_,player,hero)
    local time = hero:get '复活时间'
    ac.player.self:send_msg(('|cffff0000[系统]|r%s死亡'):format(player:get_color_name()))
    hero.fh_timer = hero:wait(time*1000,function(t)
        local point = hero.fh_point or player.point1
        hero.fh_timer = nil
        t:remove()
        player:set_camera(point)
        hero:revive(point)
        hero:add('魔法',hero:get '魔法上限')
        hero:add_effect('origin',[[Abilities\Spells\Human\Resurrect\ResurrectTarget.mdl]]):remove()
    end)
end)


ac.buff('假死复活'){
    title = function(self)
        return ('等待复活(|cff00ff00%0.f秒|r)'):format(self:get_remaining())
    end,
    on_add = function(self)
        local hero = self.owner
        hero:notify('英雄-开始复活',hero)
        hero:set_color(0x99000000)
        hero:set('生命',1)
        hero:set('魔法',hero:get('魔法上限'))
        hero:add_restriction '无敌'
        hero:add_restriction '缴械'
        hero:add_restriction '禁魔'
        hero:add_restriction '禁疗'
        hero:add_restriction '幽灵'
        self:gc(function()
            hero:set('生命',hero:get('生命上限'))
            hero:set_color(0xffffffff)
            hero:remove_restriction '无敌'
            hero:remove_restriction '缴械'
            hero:remove_restriction '禁魔'
            hero:remove_restriction '禁疗'
            hero:remove_restriction '幽灵'
        end)
    end
}

--注册一个一次性的选择英雄事件
function register_hero(func)
    ac.each_player(function(player)
        player:event '玩家-选择英雄完毕'(function(trg,player,hero)
            trg:remove()
            func(player,hero)
        end)
    end)
end


ac.game:event '游戏-注册数据完成'(function()
    ac.each_player(function(player)
        player:notify('玩家-随机英雄',player)
    end)
    if package.local_test then
        local point = ac.point(0,0)
        for a=1,6 do
            local point = point - {math.random(100),math.random(400)}
            local unit = ac.player[12]:create_unit('小怪模板',point)
            unit:set('生命上限',10000)
            unit:add_restriction '免死'
            unit:add_restriction '定身'
        end
    end
end)
